/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sn.controller;

import java.util.List;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import sn.metier.Notification;
import sn.metier.Partage;
import sn.metier.Personne;
import sn.service.ConnectionService;
import sn.service.NotificationService;
import sn.service.PartageService;
import sn.service.PersonneService;

/**
 *
 * @author Pluce
 */
@Controller
public class IndexController {
    
    @Autowired
    private ConnectionService connectionService;
    
    @Autowired
    private PersonneService personneService;
    
    @Autowired
    private PartageService partageService;
    
    @Autowired
    private NotificationService notificationService;
    
    @Transactional
    @RequestMapping("/index.htm")
    public String index(Model model, HttpSession session){
        if(session.isNew() || session.getAttribute("user") == null){
            //session.setAttribute("user", "plog");
            return "indexNonConnecte";
        }
        Long auteur = (Long)session.getAttribute("user");
        
        Personne user = personneService.voirPersonne(auteur);
        model.addAttribute("user",user);
        
        List<Notification> notifs = notificationService.listerNotificationParDestinataire(auteur);
        model.addAttribute("notifs",notifs);
        
        List<Partage> monMur = partageService.voirMurPerso(auteur);
        model.addAttribute("mur",monMur);
        
        List<Personne> amis = user.getAmis();
        user.getAmis().size();
        model.addAttribute("amis",amis);
        return "index";
    }
    
    @RequestMapping("/login.htm")
    public String login(Model model,HttpSession session, String email, String password){
        if(email == null || email.length() == 0){
            model.addAttribute("login_error", "Le login ne doit pas être vide");
            return "indexNonConnecte";
        }
        if(password == null || password.length() == 0){
            model.addAttribute("login_error", "Le password ne doit pas être vide");
            return "indexNonConnecte";
        }
        Personne connect = connectionService.seConnecter(email, password);
        if(connect == null){
            model.addAttribute("login_error", "L'utilisateur demandé n'existe pas, ou le mot de passe est mauvais.");
            return "indexNonConnecte";
        }
        session.setAttribute("user", connect.getId());
        return "redirect:/index.htm";
    }
    
    @RequestMapping("/inscription.htm")
    public String inscription(Model model,HttpSession session,
                                String prenom, String nom, String pseudo,
                                String email, String password, String password2){
        
        Personne ancienFormulaire = new Personne(nom, prenom,pseudo,email,null);
        model.addAttribute("form",ancienFormulaire);
        
        if(prenom == null || prenom.length() == 0){
            model.addAttribute("error", "Le prenom ne doit pas être vide");
            return "indexNonConnecte";
        }
        if(nom == null || nom.length() == 0){
            model.addAttribute("error", "Le nom ne doit pas être vide");
            return "indexNonConnecte";
        }
        if(pseudo == null || pseudo.length() == 0){
            model.addAttribute("error", "Le pseudo ne doit pas être vide");
            return "indexNonConnecte";
        }
        if(email == null || email.length() == 0){
            model.addAttribute("error", "L'email ne doit pas être vide");
            return "indexNonConnecte";
        }
        if(password == null || password.length() == 0){
            model.addAttribute("error", "Le password ne doit pas être vide");
            return "indexNonConnecte";
        }
        if(!password.equals(password2)){
            model.addAttribute("error", "Les deux mots de passe doivent correspondre.");
            return "indexNonConnecte";
        }
        try {
            Personne p = connectionService.sinscrire(nom, prenom, pseudo, email, password);            
            session.setAttribute("user", p.getId());
            return "redirect:/index.htm";
        } catch (Exception e){
            model.addAttribute("error", e.getMessage());
            return "indexNonConnecte";
        }
    }
    
    @RequestMapping("/logout.htm")
    public String logout(HttpSession session){
        session.invalidate();
        return "redirect:/index.htm";
    }
}
